home *** CD-ROM | disk | FTP | other *** search
/ Windows 95 API Bible / Windows 95 API Bible 3 Disc Set.iso / Win32 API Bible Book 1 of 3 / CHAPTE18 / EX5.C < prev    next >
C/C++ Source or Header  |  1994-12-26  |  3KB  |  90 lines

  1. #include <genstub.c>
  2.  
  3. LRESULT CALLBACK WndProc (HWND  hWnd,  UINT uMsg, WPARAM wParam,  LPARAM lParam)
  4. {
  5.  
  6.    static       UINT   wClipFormat = 0;
  7.    
  8.    switch (uMsg)         /* process windows messages */
  9.    {
  10.          case WM_CREATE:
  11.                  // register special format
  12.                  wClipFormat = RegisterClipboardFormat( "SPECIAL" ); 
  13.                  OpenClipboard( hWnd );
  14.                  EmptyClipboard( );
  15.                  SetClipboardData( wClipFormat, NULL);  // delayed rendering
  16.                  CloseClipboard( );
  17.                  break ;
  18.          case WM_RENDERALLFORMATS:
  19.          case WM_RENDERFORMAT:
  20.               {
  21.                  // receive request to render clipboard data
  22.                  HANDLE hMem;    // allocation of data to be stored in clipboard
  23.                  LPVOID lpData;  // pointer to access data
  24.  
  25.                  OpenClipboard( hWnd );
  26.                  EmptyClipboard( );
  27.                  hMem = GlobalAlloc( GHND, 64 );
  28.                  lpData = GlobalLock( hMem );
  29.                  lstrcpy( lpData, "Special data in clipboard" );
  30.                  SetClipboardData( wClipFormat, hMem );
  31.                  GlobalUnlock( hMem );
  32.                  CloseClipboard( );
  33.               }
  34.               break;
  35.          case WM_PAINT:         /* show status of clipboard format */
  36.               {
  37.                  PAINTSTRUCT ps;              // paint parameters
  38.                  BeginPaint( hWnd, &ps );
  39.                  OpenClipboard( hWnd );
  40.                  if ( IsClipboardFormatAvailable( wClipFormat ) )
  41.                  {  // if the special clipboard format is present in clipboard
  42.                     char cBuf[128];
  43.                     HANDLE hClipMem = GetClipboardData( wClipFormat );
  44.                     HANDLE hMem = GlobalAlloc( GHND, GlobalSize (hClipMem) );
  45.                     // get access to data in both buffers to store local
  46.                     LPVOID lpData = GlobalLock( hMem );
  47.                     LPVOID lpClip = GlobalLock( hClipMem );
  48.                     // copy into local buffer
  49.                     lstrcpy( lpData, lpClip );
  50.  
  51.                     TextOut( ps.hdc, 10, 10, cBuf, wsprintf( cBuf,
  52.                             "Special CB Format contains: %s", lpData ) );
  53.                     GlobalUnlock( hMem );
  54.                     GlobalFree( hMem );
  55.                     // You must UNLOCK clipboard data but you may NEVER free the data.
  56.                     GlobalUnlock( hClipMem );
  57.                  }
  58.                  CloseClipboard( );
  59.                  EndPaint( hWnd, &ps );
  60.               } 
  61.               break;
  62.  
  63.          case WM_COMMAND:   
  64.                  switch (wParam)
  65.                  {
  66.                      case IDM_TEST:      
  67.                         InvalidateRect( hWnd, NULL, TRUE );
  68.                         break ;
  69.                      case IDM_EXIT:   
  70.                         DestroyWindow( hWnd );
  71.                         break;
  72. #include <aboutopt.c>
  73.                  }
  74.                  break;
  75.  
  76. #include <rbutton.c>
  77.  
  78.          case WM_DESTROY:         /* stop application */
  79.                  PostQuitMessage (0) ;
  80.                  break ;
  81.  
  82.          default:         /* default windows message processing */
  83.                  return DefWindowProc (hWnd, uMsg, wParam, lParam) ;
  84.    }
  85.    return (0L) ;
  86. }
  87.  
  88. #include <about.c>
  89.  
  90.